home *** CD-ROM | disk | FTP | other *** search
/ com!online 2005 May / com_0505_1.iso / opensource / top10 / amc_install.exe / {app} / Scripts / Yahoo Cinema (IT).ifs < prev    next >
Encoding:
Text File  |  2004-10-12  |  7.7 KB  |  297 lines

  1. // GETINFO SCRIPTING
  2. // Yahoo!Cinema
  3.  
  4. (**************************************************
  5. * Movie importation script for:                   *
  6. * Yahoo!Cinema (IT), http://it.movies.yahoo.com   *
  7. *                                                 *
  8. * (c) 2004 Stefano Mora   stefano.mora@libero.it  *
  9. * (c) 2003 Andrea Cristaudo achris@tiscalinet.it  *
  10. *                                                 *
  11. * For use with Ant Movie Catalog 3.4.1            *
  12. *  www.antp.be/software/moviecatalog              *
  13. *                                                 *
  14. *  This program is free software; you can         *
  15. *  redistribute it and/or modify it under the     *
  16. *  terms of the GNU General Public License as     *
  17. *  published by the Free Software Foundation;     *
  18. *  either version 2 of the License, or (at your   *
  19. *  option) any later version.                     *
  20. **************************************************)
  21.  
  22. program YahooCinema;
  23. var
  24.   MovieName: string;
  25.   TheMovieAddress: string;
  26.  
  27. const
  28.   PATHLOG = 'c:\Programmi\Ant Movie Catalog\Log\LogYahoo\';
  29.   
  30. // ---
  31.   
  32. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  33. var
  34. i: Integer;
  35. begin
  36. result := -1;
  37. if StartAt < 0 then
  38.   StartAt := 0;
  39. for i := StartAt to List.Count-1 do
  40.   if Pos(Pattern, List.GetString(i)) <> 0 then
  41.   begin
  42.    result := i;
  43.    Break;
  44.   end;
  45. end;
  46.  
  47. // ---
  48.  
  49. procedure AnalyzePage(Address: string);
  50. var
  51. Page: TStringList;
  52. LineNr: integer;
  53. BeginPos: integer;
  54.  
  55. begin
  56. Page := TStringList.Create;
  57.  
  58. Page.Text := GetPage(Address);
  59. //Page.LoadFromFile('c:\Programmi\Ant Movie Catalog\LogYahoo\il quinto elemento.film');  // Debug
  60. //Page.SavetoFile(PATHLOG+MovieName+'.res');
  61.  
  62. LineNr := FindLine('Non abbiamo trovato nessun risultato', Page, 0);
  63. if LineNr<>-1 then
  64.   begin
  65.   ShowMessage('Film non trovato');
  66.   exit;
  67.   end;
  68.  
  69.  
  70. LineNr := FindLine('<font face=arial,helvetica size=+1><b>Risultati ricerca</b></font>', Page, 0);
  71. if LineNr = -1 then
  72.   begin   // Trovato il film
  73.   SetField(fieldURL, Address);
  74.   AnalyzeMoviePage(Page);
  75.  
  76.   //Debug
  77.   //Page.SaveToFile('c:\Programmi\Ant Movie Catalog\LogYahoo\'+MovieName+'.film');
  78.   end
  79. else
  80.   begin   // Crea una lista di risultati
  81.   PickTreeClear;
  82.   AddMoviesTitles(Page);
  83.   if TheMovieAddress='' then
  84.     begin
  85.     if PickTreeExec(Address) then
  86.       begin
  87.       SetField(fieldURL, Address);
  88.       Page.Text := GetPage(Address);
  89.     
  90.       //Debug
  91.       // Page.SaveToFile('c:\Programmi\Ant Movie Catalog\LogYahoo\'+MovieName+'.film2');
  92.     
  93.       AnalyzeMoviePage(Page);
  94.       end;
  95.     end
  96.   else
  97.     begin
  98.     SetField(fieldURL, TheMovieAddress);
  99.     Page.Text := GetPage(TheMovieAddress);
  100.     AnalyzeMoviePage(Page);
  101.     //Debug
  102.     // Page.SaveToFile('c:\Programmi\Ant Movie Catalog\LogYahoo\'+MovieName+'.film3');
  103.     end;
  104.   end;
  105. Page.Free;
  106. end;
  107.  
  108. // ---
  109.  
  110. procedure AnalyzeMoviePage(Page: TStringList);
  111. var
  112.   Fine: Integer;
  113.   Line: string;
  114.   LineNr: Integer;
  115.   BeginPos, EndPos: Integer;
  116.   Field: integer;
  117.   strTmp: string;
  118.   
  119. begin
  120. Fine := 0;
  121.  
  122. // Cerca il tag che identifica il titolo del film
  123. LineNr := FindLine('<td><font face=arial size=+1 color="#333366"><b>', Page, 0);
  124. if LineNr > -1 then
  125. begin
  126.   //Translated Title + Year
  127.   Line := Page.GetString(LineNr);
  128.   HTMLRemoveTags(Line);
  129.  
  130.   strTmp := copy(Line, 1, pos(' (', Line));
  131.   SetField(fieldTranslatedTitle, strTmp);
  132.   SetField(fieldOriginalTitle, strTmp);
  133.   // Setta lo stesso titolo: se l'originale sarα diverso, lo modificherα poi
  134.  
  135.   // Ricava l'anno tra le parentesi
  136.   Delete(Line, 1, pos(' (', Line) + 1);
  137.   Delete(Line, pos(')', Line), pos(')', Line) + 1);
  138.   SetField(fieldYear, Line);
  139.  
  140.   // Cerca il genere
  141.   LineNr := FindLine('Genere:', Page, LineNr);
  142.   if LineNr <> -1 then
  143.     begin
  144.     Line := Page.GetString(LineNr);
  145.     BeginPos := pos('</b>', Line)+4;
  146.     EndPos := pos('<br>', Line);
  147.     SetField(fieldCategory, copy(Line, BeginPos, EndPos-BeginPos));
  148.     end
  149.  
  150.   // Durata + origine
  151.   LineNr := FindLine('Durata', Page, LineNr);
  152.   if LineNr <> -1 then
  153.     begin
  154.     Line := Page.GetString(LineNr);
  155.     BeginPos := pos('</b>', Line)+4;
  156.     EndPos := pos('<b> -', Line);
  157.     strTmp := copy(Line, BeginPos, EndPos-BeginPos);
  158.     SetField(fieldLength, strTmp);
  159.  
  160.     BeginPos := pos('ne: </b>', Line)+8;
  161.     EndPos := pos('<p>', Line);
  162.     SetField(fieldCountry, copy(Line, BeginPos, EndPos-BeginPos));
  163.     end
  164.  
  165.   // Descrizione
  166.   LineNr := FindLine('</table>', Page, LineNr);
  167.   Line := Page.GetString(LineNr+2);
  168.   // ShowMessage(Line);
  169.   SetField(fieldDescription, Line);
  170.  
  171.   // Titolo originale
  172.   LineNr := FindLine('Titolo Originale:', Page, LineNr);
  173.   if LineNr <> -1 then
  174.     begin
  175.     Line := Page.GetString(LineNr);
  176.     BeginPos := pos('</b>', Line)+4;
  177.     EndPos := pos('<br>', Line);
  178.     SetField(fieldOriginalTitle, copy(Line, BeginPos, EndPos-BeginPos));
  179.     end
  180.  
  181.   // Regia
  182.   LineNr := FindLine('Regia:', Page, LineNr);
  183.   if LineNr <> -1 then
  184.     begin
  185.     Line := Page.GetString(LineNr+1);
  186.     HTMLRemoveTags(Line);
  187.     SetField(fieldDirector, Line);
  188.     end
  189.  
  190.   // Attori
  191.   LineNr := FindLine('Attori:', Page, LineNr);
  192.   if LineNr <> -1 then
  193.     begin
  194.     Line := Page.GetString(LineNr+1);
  195.     HTMLRemoveTags(Line);
  196.     SetField(fieldActors, Line);
  197.     end
  198.  
  199.   // Prodotto
  200.   LineNr := FindLine('Prodotto da:', Page, LineNr);
  201.   if LineNr <> -1 then
  202.     begin
  203.     Line := Page.GetString(LineNr+1);
  204.     HTMLRemoveTags(Line);
  205.     SetField(fieldProducer, Line);
  206.     end
  207.  
  208.   // Critica
  209.   LineNr := FindLine('Critica', Page, LineNr);
  210.   if LineNr <> -1 then
  211.     begin
  212.     Line := Page.GetString(LineNr+11);
  213.     HTMLRemoveTags(Line);
  214.     SetField(fieldComments, Line);
  215.     end
  216.  
  217.   if pos('<b>Titolo Originale: </b>', Line) = 1 then
  218.      begin
  219.      HTMLRemoveTags(Line);
  220.      Delete(Line, 1, 18);
  221.      SetField(fieldOriginalTitle, Line);
  222.      end
  223.    else if pos('alt="Immagine"', Line) <> 0 then
  224.      begin
  225.      Delete(Line, 1, pos('<img ', Line) + 10);
  226.      Delete(Line, pos('" width=', Line), pos('>', Line) + 1);
  227.      GetPicture(Line, False);
  228.      end
  229.  
  230.   DisplayResults;
  231.   end;
  232.  
  233. end;
  234.  
  235. // ---
  236.  
  237. procedure AddMoviesTitles(Page: TStringList);
  238. var
  239.   LineNr: Integer;
  240.   NewLineNr: Integer;
  241.   Line: string;
  242.   MovieTitle, MovieAddress: string;
  243.   BeginPos, EndPos: Integer;
  244.  
  245. begin
  246. TheMovieAddress := '*';
  247. LineNr := 0;
  248. LineNr := FindLine('<font face=arial,helvetica><b>Risulati Film</b>',Page,LineNr);
  249. LineNr := LineNr + 3;
  250.  
  251. PickTreeAdd('Risultati ricerca per "' + MovieName + '":', '');
  252.  
  253. while LineNr > 2 do
  254. begin
  255.   Line := Page.GetString(LineNr);
  256.   BeginPos := pos('<li><b><a href="',Line)+16;
  257.   EndPos := pos('">',Line);
  258.   MovieAddress := copy(Line,BeginPos,EndPos-BeginPos);
  259.   Delete(Line,1,EndPos + 1);
  260.   BeginPos := 1;
  261.   EndPos := -1;
  262.   MovieTitle := Line;
  263.   HTMLRemoveTags(MovieTitle);
  264.   HTMLDecode(Movietitle);
  265.   PickTreeAdd(MovieTitle, MovieAddress);
  266.  
  267.   NewLineNr := FindLine('<li><b><a href="',Page,LineNr+1);
  268.   if NewLineNr <> (LineNr + 1) then
  269.    LineNr := 2
  270.   else
  271.    LineNr := NewLineNr;
  272.  
  273.   if TheMovieAddress='*' then
  274.    TheMovieAddress := MovieAddress
  275.   else
  276.    TheMovieAddress := '';
  277. end;
  278. if TheMovieAddress='*' then TheMovieAddress := '';
  279. end;
  280.  
  281. // main
  282.  
  283. begin
  284. if CheckVersion(3,4,1) then
  285. begin
  286.   MovieName := GetField(fieldOriginalTitle);
  287.   if MovieName = '' then
  288.    MovieName := GetField(fieldTranslatedTitle);
  289.   if Input('Yahoo!Cinema Import', 'Inserire il titolo del film:', MovieName) then
  290.   begin
  291.    AnalyzePage('http://it.search.movies.yahoo.com/search/movies_db_it?mt='+UrlEncode(MovieName));
  292.   end;
  293. end
  294. else
  295.   ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.4.1)');
  296. end.
  297.